<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        // 1. let 没有变量提升
        // console.log(a); //undefined
        // var a = 12;

        // 变量提升
        // var a;
        // console.log(a); //undefined
        // a = 12;


        // 8-let关键字特点.html:20 Uncaught ReferenceError: Cannot access 'b' before initialization
        // console.log(b); //报错 ： 不能直接使用未初始化的变量
        // let b = 666; 


        // 2. 不允许重复声明
        // var a =5;
        // var a = 12;
        // console.log(a); //12

        // let a = 5;
        // let a = 12;

        // Uncaught SyntaxError: Identifier 'a' has already been declared
        // console.log(a); //报错：此变量已被声明

        // 3. 块级作用域的出现，实际上使得获得广泛应用的匿名立即执行函数表达式不再必要了
        // es5
        // (function(){
        //     var a = 666;
        //     console.log(a);
        // })();

        // es6
        // {
        //     let a = 666;
        //     console.log(a);
        // }

        // 4. let 是在代码块内有效，var 是在全局范围内有效
        // 作用域
        //var 是都全局的 在以下语句中 》 for if 
        //let {} 内局部的

        // 5. 不影响作用域链
        
        // es5
    //    var a = 666;
    //    function parFn(){
    //         var b =12;
    //         function fn(){
    //             console.log(a,b);
    //         }
    //         fn();
    //    }

    //    parFn();

        // es6
        // {
        //     let a=5;
        //     {
        //         let c = 6;
        //         {
        //             let c = 7;
        //             // 不在同一个作用域下，变量名可以重复
        //             //以最近的变量值为准
        //             console.log(a,c);
        //         }
        //     }
        // }

        // 6. 不再是顶层全局对象的属性

        // var a= 12;

        // console.log(window); //存在a

        // let b = 666;

        // console.log(window); //不存在b

        // 7. 函数内部使用外部声明的let变量
        
        {
            let a= 12;
        
            
            function fn(){
                console.log(a);
            }

            fn()

        }



    </script>
</body>
</html>